package com.c2b.algorithm.leetcode.base;

/**
 * <a href="https://leetcode.cn/problems/valid-anagram/description/?envType=study-plan-v2&envId=top-interview-150">有效的字母异位词(Valid Anagram)</a>
 * <p>给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。</p>
 * <p>注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。</p>
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1:
 *      输入: s = "anagram", t = "nagaram"
 *      输出: true
 *
 * 示例 2:
 *      输入: s = "rat", t = "car"
 *      输出: false
 *     </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= s.length, t.length <= 5 * 10^4</li>
 *         <li>s 和 t 仅包含小写字母</li>
 *     </ul>
 * </p>
 * <b>进阶: 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？</b>
 *
 * @author c2b
 * @since 2023/10/11 13:44
 */
public class LC0242ValidAnagram_S {

    static class Solution {
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
            // 1. 仅包含小写字母：用数组，长度26
            int[] charCountArr = new int[26];
            for (char ch : s.toCharArray()) {
                charCountArr[ch - 'a'] += 1;
            }
            for (char ch : t.toCharArray()) {
                if (charCountArr[ch - 'a'] == 0) {
                    return false;
                }
                charCountArr[ch - 'a'] -= 1;
            }
            // 2.包含 unicode 字符：用map
            //Map<Character, Integer> charCountMap = new HashMap<>();
            //for (char ch : s.toCharArray()) {
            //    Integer times = charCountMap.getOrDefault(ch, 0);
            //    charCountMap.put(ch, times + 1);
            //}
            //for (char ch : t.toCharArray()) {
            //    if (!charCountMap.containsKey(ch) || charCountMap.get(ch) == 0) {
            //        return false;
            //    }
            //    Integer times = charCountMap.get(ch);
            //    charCountMap.put(ch, times - 1);
            //}
            return true;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.isAnagram("anagram", "nagaram"));
        System.out.println(solution.isAnagram("rat", "car"));
    }
}
